package com.yixia.system.service.system;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yixia.common.annotation.DataScope;
import com.yixia.common.core.domain.AjaxResult;
import com.yixia.common.core.domain.entity.SysUser;
import com.yixia.common.utils.page.PageBean;

import java.util.List;

/**
* @author 35038
* @description 针对表【sys_user】的数据库操作Service
* @createDate 2023-06-01 21:07:16
*/
public interface SysUserService extends IService<SysUser> {



    /**
     * 添加用户
     * @param user 用户
     */
    void insertUser(SysUser user);

    /**
     * 修改用户
     * @param user 用户
     */
    void updateUser(SysUser user);


    /**
     * 根据用户ID删除用户信息
     * @param userIds 用户ID集合
     */
    int deleteUserByIds(Long[] userIds);


    public SysUser getByUsername(String username);
    /*获取角色的权限信息*/
    public String getUserAuthorityInfo(Long userId);


    /**
     * 修改用户信息
     * @param sysUser
     */
    public int updateUserProfile(SysUser sysUser);


    /**
     * 校验用户是否允许操作
     *
     * @param user 用户信息
     */
    public void checkUserAllowed(SysUser user);

    /**
     * 校验用户是否有数据权限
     *
     * @param userId 用户id
     */
    void checkUserDataScope(Long userId);


    /**
     * 分页查询+条件查询--基础
     */
    @DataScope(deptAlias = "sys_user", deptField = "dept_id")
    List<SysUser> selectPageList(SysUser user);

    /**
     * 根据条件分页查询用户列表
     *
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    List<SysUser> selectUserList(SysUser user);

    /**
     * 重置密码
     * @param sysUser
     * @return
     */
    boolean resetPwd(SysUser sysUser);



    /**
     * 查询已分配列表
     * @param pageBean 分页条件
     * @param user 查询条件
     * @return 符合查询条件的集合
     */
    Page<SysUser> selectAllocatedList(PageBean pageBean, SysUser user);

    /**
     * 查询未分配的用户列表信息
     *
     * @param pageBean 分页条件
     * @param user     查询条件
     * @return 符合查询条件的集合
     */
    Page<SysUser> selectUnAllocatedList(PageBean pageBean, SysUser user);

    /**
     * 根据用户编号获取用户信息
     * @param userId 用户ID
     * @return 用户对象信息
     */
    public SysUser selectUserById(Long userId);

    /**
     * 修改用户状态
     * @param user 用户信息
     * @return 结果
     */
    public int updateUserStatus(SysUser user);



    /**
     * 用户授权角色
     *
     * @param userId 用户ID
     * @param roleIds 角色组
     */
    public void insertUserAuth(Long userId, Long[] roleIds);

    /**
     * 分页查询
     */
    public List<SysUser> selectUserPageList(SysUser sysUser);

    /**
     * 校验用户名称是否唯一
     */
    boolean checkUserNameUnique(SysUser user);

    /**
     * 检验用户手机号是否唯一
     */
    boolean checkPhoneUnique(SysUser user);

    /**
     * 检验邮箱账号是否唯一
     * @param user
     * @return
     */
    boolean checkEmailUnique(SysUser user);


    /**
     * 导入用户信息
     * @param userList 要导入的用户列表
     * @param isUpdateSupport 是否更新原有的信息
     * @param operName 当前登录者的用户名
     * @return 返回结果
     */
    String importUser(List<SysUser> userList, boolean isUpdateSupport, String operName);

    /**
     * 修改用户头像
     *
     * @param username 用户名
     * @param avatar 头像地址
     * @return 结果
     */
    public boolean updateUserAvatar(String username, String avatar);
}
